package com.yeban.javase.day19.test.test1;

import com.sun.org.apache.bcel.internal.generic.NEW;

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/11/3
 *
 * 1. 【客户端】输入流，从硬盘读取文件数据到程序中。
 * 2. 【客户端】输出流，写出文件数据到服务端。
 * 3. 【服务端】输入流，读取文件数据到服务端程序。
 * 4. 【服务端】输出流，写出文件数据到服务器硬盘中。
 * 5. 【服务端】获取输出流，回写数据。
 * 6. 【客户端】获取输入流，解析回写数据。
 */
public class FileClient {

    public static void main(String[] args) {
        System.out.println("---------- Client客户端 ----------");

        try {
            // 连接服务端
            Socket socket = new Socket(InetAddress.getLocalHost(), 8123);
            System.out.println("服务端已连接~");
            // 1. 【客户端】输入流，从硬盘读取文件数据到程序中。
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("src/com/yeban/javase/day19/test/test1/good.txt")));

            // 2. 【客户端】输出流，写出文件数据到服务端。
            PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
            String line = null;
            while((line = br.readLine()) != null) {
                pw.println(line);
            }

            // 🚨 必须加上这句，告诉服务器“我发完了”
            socket.shutdownOutput();

            // 6. 【客户端】获取输入流，解析回写数据。
            BufferedReader br1 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String msg = br1.readLine();
            System.out.println("收到服务器回写：" + msg);

            // 关闭资源
            br.close();
            pw.close();
            socket.close();
            System.out.println("客户端关闭~");

        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

}
